home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / Lib / or / or_dmn2or.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-18  |  1.6 KB  |  89 lines

  1. /* or_dmn2or: convert dmn form to or list */
  2.  
  3. # ifndef lint
  4. static char Rcsid[] = "@(#)$Header: /xtel/pp/pp-beta/Lib/or/RCS/or_dmn2or.c,v 6.0 1991/12/18 20:23:08 jpo Rel $";
  5. # endif
  6.  
  7. /*
  8.  * $Header: /xtel/pp/pp-beta/Lib/or/RCS/or_dmn2or.c,v 6.0 1991/12/18 20:23:08 jpo Rel $
  9.  *
  10.  * $Log: or_dmn2or.c,v $
  11.  * Revision 6.0  1991/12/18  20:23:08  jpo
  12.  * Release 6.0
  13.  *
  14.  */
  15.  
  16.  
  17.  
  18. #include "or.h"
  19. #include "util.h"
  20.  
  21. OR_ptr or_dmn2or (istr)
  22. char            *istr;
  23. {
  24.     OR_ptr      tree,
  25.         part;
  26.     char        *sargv[50],
  27.         *valptr,
  28.         str[LINESIZE];
  29.     int         count,
  30.         ortype,
  31.         sargc;
  32.  
  33.     PP_DBG (("or_dmn2or (%s)", istr));
  34.  
  35.     (void) strcpy (str, istr);
  36.  
  37.     /*
  38.     sstr2arg isn't nice, add cheks for legal char set
  39.     */
  40.  
  41.     tree = NULLOR;
  42.     sargc = sstr2arg (str, 49, sargv, ".");
  43.  
  44.     for (count = 0; count < sargc; count++) {
  45.  
  46.     PP_DBG (("or_dmn2or Component '%s'", sargv[sargc] ? sargv[sargc] : "<none>"));
  47.  
  48.     valptr = index (sargv[count], '$');
  49.  
  50.     if (valptr == NULLCP) {
  51.         PP_LOG (LLOG_EXCEPTIONS,
  52.             ("or_dmn2or No dollar in dmn encoding"));
  53.         or_free (tree);
  54.         return NULLOR;
  55.     }
  56.  
  57.     *valptr = '\0';
  58.     valptr++;
  59.  
  60.     /*
  61.     domain defined
  62.     */
  63.  
  64.     if (sargv[count][0] == '~') {
  65.         part = or_new (OR_DD, &sargv[count][1], valptr);
  66.         if ((tree = or_add (tree, part, TRUE)) == NULLOR)
  67.             return NULLOR;
  68.     }
  69.     else {
  70.         ortype = or_name2type (sargv[count]);
  71.  
  72.         if (ortype == NOTOK) {
  73.             PP_LOG (LLOG_EXCEPTIONS,
  74.                 ("or_dmn2or Unknown type '%s'",
  75.                 sargv[count]));
  76.             or_free (tree);
  77.             return NULLOR;
  78.         }
  79.  
  80.         part = or_new (ortype, NULLCP, valptr);
  81.         if ((tree = or_add (tree, part, TRUE)) == NULLOR)
  82.             return NULLOR;
  83.     }
  84.  
  85.     }  /* end of for */
  86.  
  87.     return (tree);
  88. }
  89.